package com.递归;

import java.util.Stack;

/**
 * 给定一个字符串 S，返回 “反转后的” 字符串，其中不是字母的字符都保留在原地，而所有字母的位置发生反转。
 *
 *  
 *
 * 示例 1：
 *
 * 输入："ab-cd"
 * 输出："dc-ba"
 *
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-only-letters
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 仅仅反转字母 {
    static class Solution {
        public  String reverseOnlyLetters(String S) {
            Stack<Character> letters = new Stack();
            for (char c: S.toCharArray())
                if (Character.isLetter(c))
                    letters.push(c);

            StringBuilder ans = new StringBuilder();
            for (char c: S.toCharArray()) {
                if (Character.isLetter(c))
                    ans.append(letters.pop());
                else
                    ans.append(c);
            }

            return ans.toString();
        }

        /**
         * 利用栈的特性来达到需求
         *
         * @param S
         * @return
         */
        public  String reverseOnlyLetters2(String S) {
            Stack<Character> stack = new Stack<>();
            //将字符转换成数组
            for(Character c: S.toCharArray()){
                //如果字符是字母 就加入到栈中
                if(Character.isLetter(c)){
                    stack.push(c);
                }
            }
            StringBuilder builder = new StringBuilder();
            for(Character c:S.toCharArray()){
                //是字符就是栈中取出
                if(Character.isLetter(c)){
                    builder.append(stack.pop());
                }
                //不是就不做操作
                else{
                    builder.append(c);
                }
            }
            return  builder.toString();
        }
        public static void main(String[] args) {
//          Stack<Character> c = new Stack();
//          c.push('a');c.push('b');c.push('c');
//        char a =  c.pop();
//            System.out.println(a);
//            System.out.println(c.pop());
//            System.out.println(c.pop());
//            System.out.println(c.pop());
          Solution solution = new Solution();
            System.out.println(solution.reverseOnlyLetters2("123456abc"));
            System.out.println(solution.reverseOnlyLetters2("1234--==abc098sdf"));

        }

    }


}
